// Copyright 2001 freehep
package org.xmind.org.freehep.graphicsio;

import java.io.IOException;

/**
 * Implements the Quadratic Bezier Curve PathConstructor functionality in terms
 * of Cubic Bezier Curves
 *
 * @author Mark Donszelmann
 * @version $Id: freehep-graphicsio/src/main/java/org/freehep/graphicsio/QuadToCubicPathConstructor.java 5641ca92a537 2005/11/26 00:15:35 duns $
 */
public abstract class QuadToCubicPathConstructor extends
        AbstractPathConstructor {

    protected QuadToCubicPathConstructor() {
        super();
    }

    public void move(double x, double y) throws IOException {
        currentX = x;
        currentY = y;
    }

    public void line(double x, double y) throws IOException {
        currentX = x;
        currentY = y;
    }

    public void quad(double x1, double y1, double x2, double y2)
            throws IOException {
        double xctrl1 = x1 + (currentX - x1) / 3.;
        double yctrl1 = y1 + (currentY - y1) / 3.;
        double xctrl2 = x1 + (x2 - x1) / 3.;
        double yctrl2 = y1 + (y2 - y1) / 3.;

        cubic(xctrl1, yctrl1, xctrl2, yctrl2, x2, y2);

        currentX = x2;
        currentY = y2;
    }

    public void cubic(double x1, double y1, double x2, double y2, double x3,
            double y3) throws IOException {
        currentX = x3;
        currentY = y3;
    }

    public void closePath(double x0, double y0) throws IOException {
        currentX = 0;
        currentY = 0;
    }
}
